//导入axios
import axios from 'axios'

import { Message } from 'element-ui'

import store from '@/store'

import router from '@/router'
//创建一个axios副本
const instance = axios.create({
  //设置基地址
  baseURL: process.env.VUE_APP_BASE_API,
  //设置超时时间
  timeout: 5000
})

//设置拦截器
//请求拦截器
instance.interceptors.request.use(
  config => {
    //获取token
    const token = store.getters.token
    if (token) {
      //统一设置请求头中的token
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

//响应拦截器
instance.interceptors.response.use(
  response => {
    //得到的返回数据
    const { data, message, success } = response.data
    if (success) {
      //网络请求正常
      return data // 经过这个 reutrn 将来网络请求得以的数据不需要再从 res.data 中的取数据了，可以直接得到结果
    } else {
      //提示出错
      Message({
        message,
        type: 'error'
      })
    }
    return Promise.reject(new Error(message))
  },
  // 请求失败时的回调函数
  error => {
    // error：是一个对象
    //    reponse: 服务器返回的信息
    //       data：服务器返回的响应休中数据
    //          code：1002 说明 token 失效
    // 判断当前错误是否为 token 失效
    // console.dir(error);
    if (
      error.response &&
      error.response.data &&
      error.response.data.code === 10002
    ){
      //提示token失效
      Message.info('登录失效，请重新登录')
       // 删除 token
      store.dispatch('user/logout')
      //保存当前页面的路径
      const path =window.location.href.split('#')[1]
      //跳转到登录页面
      router.push(`/login?_redirect=${path}`)
    }else{
      Message.error(error.message)
    }
      return Promise.reject(error)
  }
)

export default instance
